package com.lzy.chat.b_mapper;

import com.lzy.chat.a_entity.AddGroup;
import com.lzy.chat.a_entity.Group;
import com.lzy.chat.a_entity.GroupShip;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;
import java.util.List;

@Mapper
public interface GroupMapper {
    /**
     * 插入群
     *
     * @param group 群聊对象
     * @return 影响行数
     */
    Integer insertGroup(Group group);

    /**
     * 插入群关系
     *
     * @param groupShip 群关系
     * @return 影响行数
     */
    Integer insertGroupShip(GroupShip groupShip);

    /**
     * 删除群聊
     *
     * @param id 群聊id
     * @return 影响行数
     */
    Integer deleteGroup(Integer id);

    /**
     * 删除群关系
     *
     * @param uid 用户id
     * @param gid 群id
     * @return 影响行数
     */
    Integer deleteGroupShip(Integer uid, Integer gid);

    /**
     * 获取群关系
     *
     * @param uid 用户id
     * @param gid 群id
     * @return 关系
     */
    GroupShip getGroupShip(Integer uid, Integer gid);

    /**
     * 通过群id获取所有关系
     *
     * @param gid 群id
     * @return 关系list
     */
    List<GroupShip> getGroupShipByGid(Integer gid);

    /**
     * 通过uid获取所有群关系
     *
     * @param uid 用户id
     * @return 关系list
     */
    List<GroupShip> getGroupShipByUid(Integer uid);

    /**
     * 根据名字模糊搜索群
     *
     * @param keyword 关键字
     * @return 群list
     */
    List<Group> getGroupByName(String keyword);

    /**
     * 根据id搜索群
     *
     * @param id 群id
     * @return 群
     */
    Group getGroupById(Integer id);

    /**
     * 更新群信息
     *
     * @param group 群
     * @return 影响行数
     */
    Integer updateGroupInfo(Group group);

    /**
     * 更新用户在gid群中最后的阅读时间
     *
     * @param gid          群id
     * @param uid          用户id
     * @param lastReadDate 时间
     * @return 影响行数
     */
    Integer updateLastReadDate(Integer gid, Integer uid, Date lastReadDate);

    List<Integer> getOnesManageGroup(Integer uid);

    List<Integer> getOnesGroup(Integer uid);

    List<Integer> getGroupManager(Integer gid);

    Integer insertAddGroup(AddGroup addGroup);

    Integer dealAddGroup(Integer id, Integer deal);

    List<AddGroup> getUnDealByGid(Integer gid);

    Integer countUnDeal(Integer gid);

    AddGroup getByUidAndGid(Integer uid, Integer gid);
}
